import numpy as np

# 向量的运算
L = np.arange(10)
A = 2 * L + 1
print(A)
print(A / 2)    # 浮点除法
print(A // 2)   # 除法后取整
print(A ** 2)
print(A % 2)
print(1 / A)
print(np.power(L, 3))   # 求每个元素的三次方
print(np.exp(L)) # 对每个元素求指数函数
print(np.log(A)) # 对每个元素求自然对数
print(np.log2(A))


# 矩阵的运算
A = np.arange(4).reshape((2, 2))
B = np.full((2, 2), 10)
print(A)
print(B)
print(A + B)    # 对应元素相加
print(A * B)    # 对应元素相乘
print(A / B)    # 对应元素相除
print(A.dot(B)) # 矩阵的乘法
print(A.T)

# 向量与矩阵的运算
v = np.array([1, 2])
print("A:", A)
print(v + A)    # 向量与矩阵相加，广播机制
print(v * A)    # 广播机制后，再将对应元素相乘
print("v.a:", v.dot(A))     # 矩阵的乘法
print("a.v:" ,A.dot(v))     # 自动将v由行向量转为了列向量

# 矩阵的逆,只有方阵才存在逆矩阵
print("A:", A)
invA = np.linalg.inv(A) # 求逆
print(invA)
print(A.dot(invA)) # 原矩阵点乘逆矩阵 = 单位矩阵
print(invA.dot(A))

